package ASAExpression;

import application.FunctionStack;
import application.Memory;
import exceptions.ExecutionException;

/**
 * Classe representant une variable
 * @author D.romain
 * @author O.riad
 */
public class ASAVariable extends ASAExpr {

    private String key; 
    
    /**
     * Constructeur prenant en paramètre 
     * le nom de la variable
     * @param key nom de la variable
     */
    public ASAVariable (String key) {
        this.key = key;
    }
    
    /**
     * NOM IMPLEMTENTEE
     * @return null
     */
    @Override
    public ASAExpr getExpr1() {
        return null;
    } 

    /**
     * NOM IMPLEMTENTEE
     * @return null
     */
    @Override
    public ASAExpr getExpr2() {
        return null;
    }
    
    /**
     * Indexe la variable dans la mémoire
     * de l'application
     * @return 
     */
    @Override
    public int evalue() throws ExecutionException{
        int value = 0;
        try{
            value = Memory.get(FunctionStack.getExecCurrentFunction(), this.key);
        }catch(NullPointerException e){
            throw new ExecutionException(9);
        }
        return value;
        
    }
   
    /**
     * Change le nom de la variable
     * @param key 
     */
    protected void setKey(String key){
        this.key = key;
    }

    /**
     * Affichage type explorateur de la variable (nom)
     * @return 
     */
    @Override
    public String getLabelExplorateur() throws ExecutionException{
        return "VARIABLE = " + evalue();
    }
    
    /**
     * Recupere le nom de la variable
     * @return 
     */
    public String getVariableName(){
        return this.key;
    }
    
}
